package com.peng.sparktest.sparkcore

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * scala版 word count
 */
object ScalaWordCount {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setAppName("master")
    conf.setMaster("local")
    val sparkContext = new SparkContext(conf)
    val lines: RDD[String] = sparkContext.textFile("test_file/wc.txt")
    //    lines.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).foreach(println)
    val flatMapRes: RDD[String] = lines.flatMap(_.split(" "))
    val mapRes: RDD[(String, Int)] = flatMapRes.map((_, 1))
    val reduceRes: RDD[(String, Int)] = mapRes.reduceByKey(_ + _)
    val reduceResMap: RDD[(Int, Int)] = reduceRes.map((x) => (x._2, 1))
    val finRes: RDD[(Int, Int)] = reduceResMap.reduceByKey(_ + _)
    finRes.foreach(println)

    //Spark RDD三种类型的算子:
    // 1、 创建型  HadoopRDD  如： textFile
    // 2、转换型  MapPartitionsRDD  如： map flatMap
    // 3、action执行型  如： foreach...


    while (true) {

    }

  }
}
